﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;

public partial class Views_EmployeesTrainingFosterings : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            StorecbxAddManaProvince_LoadData();
        }
    }

    protected void StorecbxAddManaProvince_LoadData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                List<Province> list = db.Provinces.ToList<Province>();
                list.Sort((new SortObjectsProvinces()).Compare);

                StorecbxAddManaProvince.DataSource = list;
                StorecbxAddManaProvince.DataBind();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    [DirectMethod]
    public void cbxAddManaProvince_SelectedChange()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int provID = Int32.Parse(cbxAddManaProvince.Value.ToString());
                Province provSelected = db.Provinces.Single(p => p.ProvID == provID);

                List<District> list = provSelected.Districts.ToList<District>();
                StoreViewDistrictByProvinces.DataSource = list;
                StoreViewDistrictByProvinces.DataBind();


                StoreAddManaCommune.DataSource = new List<Commune>();
                StoreAddManaCommune.DataBind();

                StoreAddManaOrganization.DataSource = new List<Organization>();
                StoreAddManaOrganization.DataBind();

                StoreAddManaDepartment.DataSource = new List<Department>();
                StoreAddManaDepartment.DataBind();

                StorecbxUpdateForEmpProfiles.DataSource = new List<Employee>();
                StorecbxUpdateForEmpProfiles.DataBind();

                StoreFosTrainning.DataSource = new List<Object>();
                StoreFosTrainning.DataBind();

                ControlsView_Reset();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    [DirectMethod]
    public void cbxAddManaDistrict_SelectedChange()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int distID = Int32.Parse(cbxAddManaDistrict.Value.ToString());

                District dist = db.Districts.Single(p => p.DistID == distID);

                StoreAddManaCommune.DataSource = dist.Communes.ToList<Commune>();
                StoreAddManaCommune.DataBind();

                StoreAddManaOrganization.DataSource = new List<Organization>();
                StoreAddManaOrganization.DataBind();

                StoreAddManaDepartment.DataSource = new List<Department>();
                StoreAddManaDepartment.DataBind();

                StorecbxUpdateForEmpProfiles.DataSource = new List<Employee>();
                StorecbxUpdateForEmpProfiles.DataBind();

                StoreFosTrainning.DataSource = new List<Object>();
                StoreFosTrainning.DataBind();

                ControlsView_Reset();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    [DirectMethod]
    public void cbxAddManaCommune_SelectedChange()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int comID = Int32.Parse(cbxAddManaCommune.Value.ToString());

                Commune dist = db.Communes.Single(c => c.ComID == comID);

                StoreAddManaOrganization.DataSource = dist.Organizations.ToList<Organization>();
                StoreAddManaOrganization.DataBind();

                StoreAddManaDepartment.DataSource = new List<Department>();
                StoreAddManaDepartment.DataBind();

                StorecbxUpdateForEmpProfiles.DataSource = new List<Employee>();
                StorecbxUpdateForEmpProfiles.DataBind();

                StoreFosTrainning.DataSource = new List<Object>();
                StoreFosTrainning.DataBind();

                ControlsView_Reset();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    [DirectMethod]
    public void cbxAddManaOrganization_SelectedChange()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int orgID = Int32.Parse(cbxAddManaOrganization.Value.ToString());

                Organization org = db.Organizations.Single(o => o.OrgID == orgID);

                StoreAddManaDepartment.DataSource = org.Departments.ToList<Department>();
                StoreAddManaDepartment.DataBind();

                StorecbxUpdateForEmpProfiles.DataSource = new List<Employee>();
                StorecbxUpdateForEmpProfiles.DataBind();

                StoreFosTrainning.DataSource = new List<Object>();
                StoreFosTrainning.DataBind();

                ControlsView_Reset();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    [DirectMethod]
    public void cbxAddManaDepartment_SelectedChange()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int depID = Int32.Parse(cbxAddManaDepartment.Value.ToString());

                Department dep = db.Departments.Single(o => o.DepID == depID);

                StorecbxUpdateForEmpProfiles.DataSource = dep.Employees1.ToList<Employee>();
                StorecbxUpdateForEmpProfiles.DataBind();

                StoreFosTrainning.DataSource = new List<Object>();
                StoreFosTrainning.DataBind();

                ControlsView_Reset();
            }

        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    [DirectMethod]
    public void cbxUpdateForEmpProfiles_SelectedChange()
    {

        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int empID = Int32.Parse(cbxUpdateForEmpProfiles.Value.ToString());

                StoreFosTrainning_LoadData();

                StoreFosTrainning.DataSource = new List<Object>();
                StoreFosTrainning.DataBind();

                ControlsView_Reset();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    protected void StoreFosTrainning_LoadData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                int empID = Int32.Parse(cbxUpdateForEmpProfiles.Value.ToString());
                var result = db.Proc_TrainningFosterings_EmpID(empID).ToList<Proc_TrainningFosterings_EmpID_Result>();

                StoreFosTrainning.DataSource = result;
                StoreFosTrainning.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    protected void StoreFosTrainning_ReadData(object sender, StoreReadDataEventArgs e)
    {
        StoreFosTrainning_LoadData();
    }

    protected void ToolbarShowAdd_DirectClick(object sender, Ext.Net.DirectEventArgs e)
    {
        if (cbxUpdateForEmpProfiles.Text.Trim().Equals(""))
        {
            X.Msg.Alert("Thông báo hệ thống", "Bạn chưa lựa chọn cán bộ nhân viên cần thêm mới quá trình bồi dưỡng, đào tạo").Show();
        }
        else
        {
            WindownShowFormAddFos.Hidden = false;
            StoreAddSelectAddOfTrain_LoadData();
            StoreSelectAddOfQualifi_LoadData();
        }
    }

    protected void StoreAddSelectAddOfTrain_LoadData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                StoreAddSelectAddOfTrain.DataSource = db.TypeOfTrainnings.ToList<TypeOfTrainning>();
                StoreAddSelectAddOfTrain.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    protected void StoreAddSelectAddOfTrain_ReadData(object sender, StoreReadDataEventArgs e)
    {
        StoreAddSelectAddOfTrain_LoadData();
    }

    protected void StoreSelectAddOfQualifi_LoadData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                StoreSelectAddOfQualifi.DataSource = db.Qualifications.ToList<Qualification>();
                StoreSelectAddOfQualifi.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    protected void StoreSelectAddOfQualifi_ReadData(object sender, StoreReadDataEventArgs e)
    {
        StoreSelectAddOfQualifi_LoadData();
    }

    [DirectMethod]
    public void WindownShowFormAddFos_DirectClick()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                TrainingFostering train = new TrainingFostering()
                {
                    EmpID = Int32.Parse(cbxUpdateForEmpProfiles.Value.ToString()),
                    NameSchoolTrain = TextAddNameSchool.Text.Trim(),
                    Specialized = TextAddSpecial.Text.Trim(),
                    StartOfDate = DateTime.Parse(TextAddDateStart.Text.Trim()),
                    EndOfDate = DateTime.Parse(TextAddDateEnd.Text.Trim()),
                    TrainID = Int32.Parse(SelectAddOfTrain.Value.ToString()),
                    QuaID = Int32.Parse(SelectAddOfQualifi.Value.ToString())
                };

                db.TrainingFosterings.Add(train);
                db.SaveChanges();

                WindownShowFormAddFos.Hidden = true;
                StoreFosTrainning_LoadData();
                X.Msg.Alert("Hệ thống thông báo", "Thêm mới thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau").Show();
        }
    }

    protected void Row_Selected(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = null;
                try
                {
                    rsm = GridPanelFosTrainning.SelectionModel.Primary as RowSelectionModel;
                    if (rsm.SelectedRow == null)
                    {
                        X.Msg.Alert("Thông báo", "Bạn chưa chọn quá trình học vấn để xem thông tin").Show();
                        return;
                    }

                    int traFosID = Int32.Parse(rsm.SelectedRow.RecordID);
                    TrainingFostering trainFos = db.TrainingFosterings.Single(t => t.TraFosID == traFosID);


                    if (trainFos.Employee.AvatarUrl == null)
                    {
                        Dis_Avatar.ImageUrl = "~/Views/Avatars/add_user_256.png";
                    }
                    else
                    {
                        Dis_Avatar.ImageUrl = "~/Views/Avatars/" + trainFos.Employee.AvatarUrl;
                    }


                    Dis_CodeEmp.Text = trainFos.Employee.Code;
                    Dis_FullName.Text = trainFos.Employee.FirstName + "" + trainFos.Employee.LastName;
                    Dis_SchoolTrain.Text = trainFos.NameSchoolTrain;
                    Dis_CurrentWork.Text = "Phòng: " + trainFos.Employee.Department1.NameOfDep + ", Cơ quan: " + trainFos.Employee.Department1.Organization.NameOfOrgan + ", phường(xã): " +
                        trainFos.Employee.Department1.Organization.Commune.NameOfComm + ", quận(huyện): " + trainFos.Employee.Department1.Organization.Commune.District.NameOfDist + ", tỉnh: " +
                        trainFos.Employee.Department1.Organization.Commune.District.Province.NameOfProvince;
                    Dis_Specialized.Text = trainFos.Specialized;

                    Dis_StartOfDate.Text = trainFos.StartOfDate.Value.ToShortDateString();
                    Dis_EndOfDate.Text = trainFos.EndOfDate.Value.ToShortDateString();

                    Dis_NameOfTrain.Text = trainFos.TypeOfTrainning.NameOfTrain;
                    Dis_CodeOfQua.Text = trainFos.Qualification.NameOfQua;

                    //Dis_Status.Checked = Boolean.Parse(trainFos.StatusOfTrain.ToString());
                }
                catch (Exception)
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn quá trình học vấn đề xem thông tin chi tiết").Show();
                    return;
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void ControlsView_Reset()
    {
        Dis_Avatar.ImageUrl = "~/Views/Avatars/add_user_256.png";
        Dis_CodeEmp.Text = "";
        Dis_FullName.Text = "";
        Dis_SchoolTrain.Text = "";
        Dis_CurrentWork.Text = "";
        Dis_Specialized.Text = "";

        Dis_StartOfDate.Text = "";
        Dis_EndOfDate.Text = "";

        Dis_NameOfTrain.Text = "";
        Dis_CodeOfQua.Text = "";

        //Dis_Status.Checked = false;
    }

    [DirectMethod]
    public void RowTrainningFor_DirectClick(int traFosID)
    {
        try
        {
            WindowUpdateTraining.Hidden = false;
            StoreUpdateTypeOfTrain_LoadData();
            StoreUpdateQualifi_LoadData();
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                TextFieldHidden.Text = traFosID.ToString();
                TrainingFostering trainFosSelected = db.TrainingFosterings.Single(p => p.TraFosID == traFosID);

                TextUpdateNameSchool.Text = trainFosSelected.NameSchoolTrain;
                TextUpdateSpecial.Text = trainFosSelected.Specialized;

                DateUpdateStart.Text = trainFosSelected.StartOfDate.ToString();
                DateUpdateEnd.Text = trainFosSelected.EndOfDate.ToString();

                SelectUpdateTypeOfTrain.Value = trainFosSelected.TrainID;
                SelecUpdateQualifi.Value = trainFosSelected.QuaID;
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau").Show();
        }
    }

    [DirectMethod]
    public void UpdateTrainnings_DirectClick()
    {
        try
        {
            int trainUpdated = Int32.Parse(TextFieldHidden.Text.Trim());
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {

                TrainingFostering trainUpdate = db.TrainingFosterings.Single(p => p.TraFosID == trainUpdated);

                trainUpdate.NameSchoolTrain = TextUpdateNameSchool.Text.Trim();
                trainUpdate.Specialized = TextUpdateSpecial.Text.Trim();
                trainUpdate.StartOfDate = DateTime.Parse(DateUpdateStart.Text.Trim());
                trainUpdate.EndOfDate = DateTime.Parse(DateUpdateEnd.Text.Trim());
                trainUpdate.TrainID = Int32.Parse(SelectUpdateTypeOfTrain.Value.ToString());
                trainUpdate.QuaID = Int32.Parse(SelecUpdateQualifi.Value.ToString());
                //trainUpdate.StatusOfTrain = true;

                db.SaveChanges();

                WindowUpdateTraining.Hidden = true;
                StoreFosTrainning_LoadData();

                X.Msg.Alert("Hệ thống thông báo", "Cập nhật quá trình đào tạo, bồi dưỡng thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau").Show();
        }
    }

    protected void StoreUpdateTypeOfTrain_LoadData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                StoreUpdateTypeOfTrain.DataSource = db.TypeOfTrainnings.ToList<TypeOfTrainning>();
                StoreUpdateTypeOfTrain.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    protected void StoreUpdateTypeOfTrain_ReadData(object sender, StoreReadDataEventArgs e)
    {
        StoreUpdateTypeOfTrain_LoadData();
    }

    protected void StoreUpdateQualifi_LoadData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                StoreUpdateQualifi.DataSource = db.Qualifications.ToList<Qualification>();
                StoreUpdateQualifi.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau");
        }
    }

    protected void StoreUpdateQualifi_ReadData(object sender, StoreReadDataEventArgs e)
    {
        StoreUpdateQualifi_LoadData();
    }
    
    [DirectMethod]
    public void RowDeleteTrainningFor_DirectClick(int traFosID)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                TextFieldHiddenDelete.Text = traFosID.ToString();
                TrainingFostering trainFosSelected = db.TrainingFosterings.Single(p => p.TraFosID == traFosID);

                X.Msg.Confirm("Thông báo hệ thống", String.Format("Bạn có muốn xóa quá trình đào tạo và bồi dưỡng đã chọn ? [{0}]", trainFosSelected.NameSchoolTrain),
                new MessageBoxButtonsConfig()
                {
                    Yes = new MessageBoxButtonConfig
                    {
                        Text = "Xóa",
                        Handler = "App.direct.DoYes_DeleteTrainningFos();"
                    },
                    No = new MessageBoxButtonConfig
                    {
                        Text = "Hủy bỏ"
                    }
                }).Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau").Show();
        }
    }

    [DirectMethod]
    public void DoYes_DeleteTrainningFos()
    {
        try
        {
            int trainFosID = Int32.Parse(TextFieldHiddenDelete.Text.Trim());
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                TrainingFostering trainFosSelected = db.TrainingFosterings.Single(p => p.TraFosID == trainFosID);
                db.TrainingFosterings.Remove(trainFosSelected);
                db.SaveChanges();

                StoreFosTrainning_LoadData();
                ControlsView_Reset();
                X.Msg.Alert("Hệ thống thông báo", "Xóa quá trình đào tạo, bồi dưỡng thành công [" + trainFosSelected.NameSchoolTrain + "]").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Hệ thống thông báo", "Hệ thống đang bận, hãy thử lại sau").Show();
        }
    }
}